import { AppDataSource } from "@/config/database";
import { User } from "@/entities/system/user.entity";
import { ErrorHandler } from "@/middlewares/error.middleware";
import { Context } from "koa";

export interface IDeleteUserParams {
    /** 用户ID */
    id: string;
}

/** 删除用户 */
export async function deleteUser(ctx: Context) {
    const { id } = ctx.params as IDeleteUserParams;

    validateParams(id); // 校验参数
    await checkUserExists(id); // 检查用户是否存在
    await removeUser(id); // 删除用户

    ctx.status = 200;
    ctx.body = {
        code: 200,
        message: '用户删除成功'
    };
}

/** 校验参数 */
const validateParams = (id: string) => {
    if (!id) {
        throw new ErrorHandler('用户ID不能为空', 400);
    }

    // UUID格式验证
    const uuidRegex = /^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i;
    if (!uuidRegex.test(id)) {
        throw new ErrorHandler('用户ID格式不正确', 400);
    }
}

/** 检查用户是否存在 */
const checkUserExists = async (id: string) => {
    const userRepository = AppDataSource.getRepository(User);
    const user = await userRepository.findOne({
        where: { id }
    });

    if (!user) {
        throw new ErrorHandler('用户不存在', 404);
    }

    // 检查是否为超级管理员，防止删除
    if (user.username === 'admin') {
        throw new ErrorHandler('无法删除超级管理员账户', 403);
    }

    return user;
}

/** 删除用户 */
const removeUser = async (id: string) => {
    const userRepository = AppDataSource.getRepository(User);
    
    // 使用软删除（如果实体支持）
    await userRepository.softDelete(id);
    
    // 如果要硬删除，可以使用：
    // await userRepository.delete(id);
}
